package org.wang.step1.chapter1;

/**
 * @description: 创建线程
 * 创建线程1：重写thread的run方法
 * 只有调用start方法，才算启动线程
 *
 * 1 java应用程序的main函数是一个线程，是被jvm启动的时候调用，线程的明字叫main
 * 2 实现一个线程，必须创建Thread实例，orverride run方法，并且调用start方法
 * 3 在jvm启动后，实际上由多个线程，但是至少有一个非守护线程
 * 4 当调用一个线程start方法的时候，此时至少有两个线程，一个是调用你的线程，还有一个是你启动的线程
 * 5 线程的生命周期 new--runnable--running--terminated
 *                       \        /
 *                        \      /
 *                         blocked
 *
 *
 * @author: XG.SUN
 * @create: 2021-09-12 17:09
 **/
public class TryConcurrent {

    public static void main(String[] args) {
        new Thread("READ-THREAD") {
            @Override
            public void run() {
                readDataFromDatabase();
            }
        }.start();
        new Thread("WRITE-THREAD"){
            @Override
            public void run() {
                writeDataToFile();
            }
        }.start();

    }

    private static void readDataFromDatabase(){
        try {
            println("Begin read data from db.");
            Thread.sleep(1000*10l);
            println("read data done and start handle it.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        println("The data handle finish and successfully!");
    }

    private static void writeDataToFile(){
        try {
            println("Begin write data to file.");
            Thread.sleep(1000*10l);
            println("write data done and start handle it.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        println("The data handle finish and successfully!");
    }

    private static void println(String message){
        System.out.println(message);
    }
}
